
package com.zsrt.day20170505.ch04;


/**
* 用链表模拟队列 ： 先进先出  后进后出
* @author zsrt
*
*/
public class Queue {

	/**
	 * 头结点
	 */
	private Node head;
	
	public  Queue(Node head){
		this.head = head;
	}
	
	/**
	 * 忘队列中添加1个节点
	 * @param node
	 */
	public void push(Node node){
		Node pNode = this.head;
		 while(true){
			 //循环找到最后一个节点
			 if(pNode.getNext()==null){
				 pNode.setNext(node);
				 break;
			 }
			 pNode = pNode.getNext();
		 }
	}
	
	
	/**
	 * 从队列中删除1个元素 每次删除的都是头节点的下一个节点
	 * @return
	 */
	public Node pop(){
		Node pNode = this.head;
		if(pNode.getNext() !=null){
			
			//打印出要删除的节点
			Node result = pNode.getNext();
			//删除节点
			pNode.setNext(pNode.getNext().getNext());
			return result;
		}else{
			System.out.println("空队列");
			return null;
		}
	}
	
	
	/**
	 * 打印队列中所有的元素
	 */
	public void printQueue(){
		Node pNode = this.head;
		while(true){
			if(pNode.getNext()!=null){
				System.out.print(pNode.getNext().getNode()+"--->");
			}else{
				break;
			}
			pNode = pNode.getNext();
		}
		System.out.println();
	}
	
	
	/**
	 * 把updateNode的值修改成updateValue
	 * @param updateNode
	 * @param updateValue
	 */
	public void updateNode(Node updateNode, int updateValue){
		Node pNode = this.head;
		while(true){
			//循环找到要修改的节点
			if(pNode.getNext().getNode() == updateNode.getNode()){
				pNode.getNext().setNode(updateValue);
				break;
			}else{
				pNode = pNode.getNext();
			}
		}
	}
}
